#include "help_function.h"

int mx;  // Zmienna globalna służąca do przechowywania współrzędnych myszki
int my;  //Zmienna globalna służąca do przechowywania współrzędnych myszki
int mb;  //Zmienna globalna służąca do przechowywania nacisniętego guzika myszki

pole*** tworzenie_tablicy(int x, int y)
{
    pole*** tablica = new pole**[x];
	for(int i=0;i<x;i++)
		tablica[i] = new pole*[y];
        return tablica;
}
int wypelnij_tablice(pole***tab)
{
    for(int i=0;i<kolumny;i++)
    {
        for(int j=0;j<wiersze;j++)
        {
            //wspolrzedna x, wspolrzedna y, czy moge przesowac, indexy w tablicy, wektory//
            tab[i][j] = new zwykle_pole(odleglosc_y+(buffor_x*i),odleglosc_x+(buffor_y*j),false,i,j,0,0,0,0); //Przypisywanie wskaznikom tablicy konkretnych obiektów
        }
    }
    return 1;
}
void wczytaj_bitmapy(pole***tab, SDL_Surface* ekran)  // do zabawy
{
    for(int i=0;i<kolumny;i++)
    {
        for(int j=0;j<wiersze;j++)
        {

            if(j%3==1)
            {
              tab[i][j]->wczytaj_obrazek(sciezka1);
              tab[i][j]->rysuj(ekran);
            }
            if(j%3==2)
            {
              tab[i][j]->wczytaj_obrazek(sciezka2);
              tab[i][j]->rysuj(ekran);
            }
            if(j%3==0)
            {
              tab[i][j]->wczytaj_obrazek(sciezka3);
              tab[i][j]->rysuj(ekran);
            }

        }
    }

}
void przesun_wierszL(pole ***tab,int x, SDL_Surface* ekran)
{

    int ile = wiersze; //Liczba wskazująca na liczbe wierszy
    int k=wiersze -1; //Pomocnicza zmienna do kontrolowania wyjscia za tablice przy zamianie elementow
    for(int i=0;i<wiersze;i++)
    {
      tab[x][ile-1]->przesun(buffor_x,0);  // Przesówanie konkretnego elementu tablicy o wektor

      if(k==(wiersze-1)) // Jeśli jest ostatni w wierszu
      {
        delete tab[x][k]; //Kasowanie ostatniego elementu
      }
      if(k-1>=0) // Sprawdza czy jestem jeszcze w tablicy
      {
        tab[x][k]=tab[x][k-1]; //Zamiana wskazników do elementow
      }

 //    clear_to_color(screen, 500);//jako tako musi byc

      wczytaj_bitmapy(tab,ekran); //Odmalowanie bitmap
      ile--;
      k--;
//     usleep(latency);


    }
      tab[x][0] = new zwykle_pole(tab[x][1]->y,tab[x][1]->x-buffor_x,false,0,x,0,0,0,0); //Stworzenie nowego obiektu na poczatku wiersza
      tab[x][0]->wczytaj_obrazek(sciezka4); //Wczytanie obrazka pierwszego obiektu
      tab[x][0]->rysuj(ekran);//Odrysowanie obrazka pierwszego elementu

}
void przesun_kolumneU(pole ***tab,int x, SDL_Surface* ekran)   // MA BUGA!!!!!!!!!!!!!!!!!!!!
{
    int ile = kolumny; //Liczba wskazująca na liczbe wierszy
    int k=kolumny -1; //Pomocnicza zmienna do kontrolowania wyjscia za tablice przy zamianie elementow
    for(int i=0;i<kolumny;i++)
    {
     tab[ile-1][x]->przesun(0,buffor_y);  // Przesówanie konkretnego elementu tablicy o wektor

      if(k==(kolumny-1)) // Jeśli jest ostatni w kolumnie
      {
        delete tab[k][x]; //Kasowanie ostatniego elementu
      }
      if(k-1>=0) // Sprawdza czy jestem jeszcze w tablicy
      {
        tab[k][x]=tab[k-1][x]; //Zamiana wskazników do elementow
      }

   //  clear_to_color(screen, 500);//jako tako musi byc

      wczytaj_bitmapy(tab, ekran); //Odmalowanie bitmap
      ile--;
      k--;
//      usleep(latency);

    }
      tab[0][x] = new zwykle_pole(tab[1][x]->y-buffor_y,tab[1][x]->x,false,0,x,0,0,0,0); //Stworzenie nowego obiektu na poczatku kolumny
      tab[0][x]->wczytaj_obrazek(sciezka4); //Wczytanie obrazka pierwszego obiektu
      tab[0][x]->rysuj(ekran);//Odrysowanie obrazka pierwszego elementu
}
void przesun_wierszR(pole ***tab,int x, SDL_Surface* screen)
{
    int ile = wiersze; //Liczba wskazująca na liczbe wierszy
    int k=0; //Pomocnicza zmienna do kontrolowania wyjscia za tablice przy zamianie elementow
    for(int i=wiersze-1;i>=0;i--)
    {
       tab[x][k]->przesun(-buffor_x,0);  // Przesówanie konkretnego elementu tablicy o wektor

      if(k==0) // Jeśli jest pierwszy w wierszu
      {
        delete tab[x][k]; //Kasowanie pierwszego
      }
      if(k+1<wiersze) // Sprawdza czy jestem jeszcze w tablicy
      {
        tab[x][k]=tab[x][k+1]; //Zamiana wskazników do elementow
      }

   //   clear_to_color(screen, 500);//jako tako musi byc

      if(i==0)
      {
         tab[x][wiersze-1] = new zwykle_pole(tab[x][wiersze-2]->y,tab[x][wiersze-2]->x+buffor_x,false,x,wiersze-1,0,0,0,0); //Stworzenie nowego obiektu na poczatku wiersza
         tab[x][wiersze-1]->wczytaj_obrazek(sciezka4); //Wczytanie obrazka pierwszego obiektu
         tab[x][wiersze-1]->rysuj(screen);//Odrysowanie obrazka pierwszego elementu
      }

      wczytaj_bitmapy(tab, screen); //Odmalowanie bitmap
      ile++;
      k++;
//      usleep(latency);


    }

}
void przesun_kolumneD(pole ***tab,int x, SDL_Surface* screen)
{
   int ile = kolumny; //Liczba wskazująca na liczbe wierszy
    int k=0; //Pomocnicza zmienna do kontrolowania wyjscia za tablice przy zamianie elementow
    for(int i=1;i<kolumny;i++)
    {
       tab[i][x]->przesun(0,-buffor_y);  // Przesówanie konkretnego elementu tablicy o wektor

      if(k==0) // Jeśli jest pierwszy w wierszu
      {
        delete tab[k][x]; //Kasowanie pierwszego
      }
      if(k+1<kolumny) // Sprawdza czy jestem jeszcze w tablicy
      {
        tab[k][x]=tab[k+1][x]; //Zamiana wskazników do elementow
      }

   //  clear_to_color(screen, 500);//jako tako musi byc

      if(i==kolumny-1)
      {
         tab[kolumny-1][x] = new zwykle_pole(tab[kolumny-2][x]->y+buffor_x,tab[kolumny-2][x]->x,false,kolumny-1,x,0,0,0,0); //Stworzenie nowego obiektu na poczatku wiersza
         tab[kolumny-1][x]->wczytaj_obrazek(sciezka1); //Wczytanie obrazka pierwszego obiektu
         tab[kolumny-1][x]->rysuj(screen);//Odrysowanie obrazka pierwszego elementu
      }

      wczytaj_bitmapy(tab,screen); //Odmalowanie bitmap
      ile++;
      k++;
//      usleep(latency);
    }


}

void animuj(pole***tab,SDL_Surface* screen)
{
    for(int i=0;i<kolumny;i++)
    {
        for(int j=0;j<wiersze;j++)
        {

              tab[i][j]->animuj(screen);

        }
    }
}
int przesowanie_wierszy(int mysz_x, int mysz_y, pole ***tab,SDL_Surface* screen)
{
  int x; //wspolrzedne do przesówania tablicy
  int y; //--------------//------------------
  x = 0;
  y = 0;

  if(mysz_x<odleglosc_x && mysz_y>odleglosc_y && mysz_y<(odleglosc_y+(buffor_y*kolumny)))  // To znaczy ze chce przesowac wiersze z lewej
  {
    y = mysz_y - odleglosc_y;

    if (y<0)
    {
    	return 0;
    }
    y = y/buffor_y;
    przesun_wierszL(tab,y,screen);

  }
  if (mysz_x>odleglosc_x+(buffor_x * wiersze) && mysz_y>odleglosc_y && mysz_y<(odleglosc_y+(buffor_y*kolumny)) ) // To znaczy że chcę przesółać wiersze z prawej
  {

    y = mysz_y - odleglosc_y;

    if (y<0)
    {
    	return 0;
    }
    y = y/buffor_y;
    przesun_wierszR(tab,y,screen);
  }
  if(mysz_y<odleglosc_y && mysz_x> odleglosc_y && mysz_x < odleglosc_x + (buffor_x * wiersze) ) // To znaczy że chcę przesółać kolumny od góry
  {
     x = mysz_x - odleglosc_x;
     if(x<0)
       return 0;
     x = x/buffor_x;
     przesun_kolumneU(tab,x,screen);
  }
  if (mysz_y>odleglosc_y +(buffor_y *kolumny) && mysz_x > odleglosc_x && mysz_x <(odleglosc_x + (buffor_x * wiersze))) //To znaczy że chcę przesółać kolumny od dołu
  {
    x = mysz_x - odleglosc_x;
    if(x<0)
      return 0;
    x = x/buffor_x;
    przesun_kolumneD(tab,x,screen);
  }
}
